package com.smedi.ismedi.progress.core.port.adapter.persistence.model;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;


@Data
public class ProgressDetailStatus {

    /**
     * 类型(0、里程碑 1、关键任务  3、其他 4、一级任务 5、二级任务 6、三级任务 7、四级任务 8、五级任务)
     */
    private String type;


    /**
     * 完成情况(0、未完成  1、完成)
     */
    private int  completion;

    /**
     * 计划完成时间
     */
    private LocalDateTime scheduleEndTime;
    /**
     * 实际开始时间
     */
    private LocalDateTime	realStartTime;


    private Double   percentage;


    /**
     * 判断项目整体状态
     * 里程碑用completion判断完成情况，其他一级任务，和关键任务用percentage
     * @param ps ps
     * @return boolean
     */
    public  static  boolean isComplete(List<ProgressDetailStatus> ps){
        // 找出未完成的,且到计划结束时间滞后的数据条数
        long in_complete_list = ps.stream().filter(v -> !isComplete(v) && LocalDateTime.now().isAfter(v.getScheduleEndTime())).count();
        // 找出已经完成，且是关键任务实际完成时间晚于计划完成时间的数据条数
        long complete_list = ps.stream().filter(v -> {
            // 如果任务实际完成时间为空则默认不过期，这部分为容错操作
            if(v.getRealStartTime()==null) return  false;
            //不区分任务-- 2024-08-19
            if(isComplete(v)){
            //if(isComplete(v) && "1".equals(v.getType())){
              return   v.getRealStartTime().isAfter(v.getScheduleEndTime());
            }else{
                return  false;
            }
        }).count();
        return in_complete_list + complete_list <= 0;
    }

    private static   boolean isComplete(ProgressDetailStatus v){
        if("0".equals(v.getType())){
            // 里程碑
          return  0==v.getCompletion();
        }else {
            //其他任务
            return  v.getPercentage()>=100 ;
        }
    }

}
